﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using vensoft.Entities;

namespace vensoft.DataAccess
{
    public class DetalleVentaDataAccess : MasterDataAcess, IDetalleVentaDataAccess
    {
        IVentaDataAccess _ventaDataAccess;
        IProductoDataAccess _productoDAL;

        public DetalleVentaDataAccess(IVentaDataAccess ventaDataAccess)
        {
            _ventaDataAccess = ventaDataAccess;
        }

        public DetalleVentaDataAccess()
        {
            // TODO: Complete member initialization
        }

        public void RegistrarDetalle(DetalleVenta detalle)
        {
            SqlCommand command = base.CreateCommand("RegistrarDetVenta");

            base.AddInParameter(command, "Cod_Producto ", detalle.ProductoId);
            base.AddInParameter(command, "Cod_Venta", detalle.VentaId);
            base.AddInParameter(command, "Cantidad", detalle.Cantidad);
            base.AddInParameter(command, "Precio", detalle.Precio);
            base.AddInParameter(command, "Monto", detalle.Monto);
            base.AddInParameter(command, "nomb_Prod", detalle.ProductName);

            base.ExecuteCommand(command);

            _ventaDataAccess.ActualizarStock(detalle.ProductoId, Int32.Parse( detalle.Cantidad.ToString()));        

        }

        public void RegistrarDetalle(List<DetalleVenta> detalles, int ventaId)
        {
            foreach (var detalle in detalles)
            {
                detalle.VentaId = ventaId;
                RegistrarDetalle(detalle);
            }
        }
        
        public List<DetalleVenta> GetFromDetalleByCodigoVenta(int codVenta)
        {
            //_productoDAL = new ProductoDataAccess();

            //DetalleVenta det = new DetalleVenta()
            //{
            //    //ProductoId ]= reader.getint32(9);
            //    //Producto = _productoDAL.GetFromProductoById(reader.getint32(9)) 
            //};
            SqlCommand comando = base.CreateSelectCommand("GetProductosFromAlmacen");
            return SelectObjectFactory(comando);
        }

        private List<DetalleVenta> SelectObjectFactory(SqlCommand commando)
        {
            List<DetalleVenta> lista = new List<DetalleVenta>();
            _productoDAL = new ProductoDataAccess();

            using (SqlDataReader reader = base.ExecuteReader(commando))
            {
                while (reader.Read())
                {
                    DetalleVenta venta = new DetalleVenta()
                    {
                          ProductoId = reader.GetInt32(0),                          
                          Cantidad = reader.GetInt32(2),
                          Precio = reader.GetDecimal(4),
                          Monto = reader.GetDecimal(3),
                          ProductName = reader.GetString(5)
                    };

                    lista.Add(venta);
                }
            }

            return lista;
        }
        
        public List<DetalleVenta> GetAllFromDetalleByVentaId(int codVenta)
        {
            SqlCommand comando = base.CreateSelectCommand("GetAllFromDetalleVentaByCodVenta");
            base.AddInParameter(comando, "cod_venta", codVenta);
            return SelectObjectFactory(comando);
        }
    }
}
